<script>
    // Cookie 与 requestverificationtoken头

            /*
                一、问题：

                        当使用 abp.ajax 发起请求时，我注意到请求头中包含 requestverificationtoken 这个头，这个头是ABP内部定义的吗？

                        另外还有一些ABP页面的cookie：

                                lpx_side-menu-state=; 

                                .AspNetCore.Antiforgery.DgBJZ1JdshM=CfDJ8CoYfkLH7OpLvyDA2_Ay4ONODE61_5DIeA_UDzpYN8OcNTO3bFmSOs8-9_hXL-paV1Q4wPNf5GsnRjuwDhR6kckHGIfgWyBaakY-aXIoDrm88w__Oe5ZkO-O0XABNGYaIsK5ah_tffNaYGOLNRQX4GQ;

                                .AspNetCore.Identity.Application=CfDJ8CoYfkLH7OpLvyDA2_Ay4OPHs6ORFJToSClDknN0ETJWv6EvPE-pKF-TVAKKeWVYtYbyU7c2yVd2Vf_lQKV-NrlGxT_PsrUn4fRJVkbzMRKy0QfkmKgR54EhwVzdpQSjbQQAJJ7OCromwbGPg0E63lad8StiSf-zAfe_QFgS58SmMFX0IOZigoRC8PbWoffvKm8CDvkDpDOpvBcP0yAIkH3Pe0CdP5o3r4MU6wcA7zvO9kHEtYLzUcZkUMHkzTn6jyO1oBKLkF63XsYNhs6by9zurhuITtwojkjsPdTpa5Jprb5pqouKqhuyChGn335eihyxKFbWWI0sVGHliosD1CsDnsJEQVOQELos1zyvmsE1KnJt9DJxupyAko9c6al2fpSs_lnI2OyrrlDQFlXZ-fOwrIm6TWG1dzt1eZ-qwm2TEEZOotpAz9I481sOIk0Eazom0xwiG3bvdHtsJnxYhfgZezH0d1h2g2wMrVtO8MeJVoNlyzruWPVPuv_lcvTYx_3KniImWAnVbB9gLPs2lLiYO9xEpjvJ1BBm5VgjcWBMXTwJ2mB_gqdQl5S4LFLXckPnRK8I6bu7UoC-urbvym1EX5jO5B4fm5-sIJ_DfYnmTT-5IWnV1Ss__VJJwJU_Con2lG9fEnr9E2CDkrXk9lrDtuH8rUmnK75QdLm2GNpMT2s7XEd2a8AoFnu94K8C6xR6UGA0dXdbj6FNomVCRWyAA1lWQklGfLCwlKdowH_jB-Mp0JVE0Y4RipuwSzfBk-DlYphj2caK_G42wTqD8FJTRAXLahhg1UuCT739Woaukbkl6I4gSvrHcKsWC5MnxyXuzxH3gNID9iNeizxrSmGhotmhYIeKctejLn3-OM8w0jC4Oik--U3r5yp34kB_eQ; XSRF-TOKEN=CfDJ8CoYfkLH7OpLvyDA2_Ay4ONbT5ERIhUKZZBldzP5XwRoVO_0QOSXAi_c5EUEZ0N0Tq9lmGfj7MdpLNaBa4pb2TrGg0VRhQQjL5IXJ7KaFYWFgRih3RuC2hrEp5ItWL0e8V1eujODRimUDQqXuvalqrd076540BWRas359O-

                        这两个分别与什么有关，
                        
                        是不是只要<abp-script-bundle name="@LeptonXLiteThemeBundles.Scripts.Global" />
                        
                        加载了就可以不用管这个Cookie和 requestverificationtoken头了，ABP会自动在请求时加上这两个东西。
            */

            /*
                二、RequestVerificationToken 请求头

                        这不是ABP内部定义的，而是  ASP.NET Core 原生的 防伪验证 (Antiforgery) 系统的一部分。

                            1、目的：

                                    用于防止跨站请求伪造 (CSRF/XSRF) 攻击。这种攻击会诱骗用户在已认证的 Web 应用中执行非本意的操作（如转账、修改密码）。

                            2、工作原理：

                                    <1>: 服务器签发Token：  

                                                当用户请求包含表单的页面时（比如你的 ABP 布局页），ASP.NET Core 会生成一个加密的 Token。

                                    <2>:Token 的两种形式：

                                                ①、Cookie：  

                                                        .AspNetCore.Antiforgery.XXXXX（你看到的那个）。
                                                        它会被设置为一个 HttpOnly 的 Cookie，客户端 JavaScript 无法读取，用于服务器验证会话。

                                                ②、表单/请求头字段： 
                                                        
                                                        通常是一个隐藏在表单中的。
                                                        <input type="hidden" name="__RequestVerificationToken" value="...">，或者像这里一样，由一个脚本读取并设置为 HTTP 请求头。

                            3、客户端发送Token：

                                    当客户端发起 Post\Put\Delete 等 "非安全"HTTP方法的请求时，必须讲这个Token一并发送。

                                    通常是放在 RequestVerificationToken 请求头中。

                            4、服务器验证：

                                    服务器收到请求后，会比对请求头中的 Token 和 Cookie 中的 Token 是否匹配。

                                    如果不匹配，请求会被拒绝 (返回 400 Bad Request).
            */

            /*
                三、你所看到的Cookie：

                            1、.AspNetCore.Antiforgery.DgBJZ1JdshM=...
                            
                                        这就是上面提到的防伪验证 Token 的 Cookie 形式。DgBJZ1JdshM 是一个随机生成的令牌名称。

                            2、XSRF-TOKEN=...

                                        这是一个为了方便 JavaScript 读取而设计的备用 Token。

                                        许多客户端库（如 Angular）的默认行为就是从名为 XSRF-TOKEN 的 Cookie 中读取 Token，并在后续请求中自动将其放入 X-XSRF-TOKEN 请求头中。
                                        
                                        ABP 也遵循了这一约定。

                            3、.AspNetCore.Identity.Application=...

                                        这是 ASP.NET Core Identity 认证票据 (Authentication Ticket) 的 Cookie。
                                        
                                        它代表了用户的登录状态。
                                        
                                        服务器通过解密这个 Cookie 来识别“你是谁”，从而判断你是否拥有执行操作的权限。这就是你保持登录状态的原因。、
                                        
                            4、lpx_side-menu-state=

                                        这个 Cookie 是 ABP 的 LeptonX 主题 特有的，用于存储用户界面（UI）的偏好设置，比如侧边导航栏是展开还是收缩状态。
                                        
                                        它是一个偏好设置 Cookie，与安全性无关。
            */

            /*
                四、核心问题：ABP会自动处理吗？

                            是的，完全正确。只要你正确加载了 ABP 的全局脚本包 (<abp-script-bundle name="@BasicThemeBundles.Scripts.Global" />)，你就完全不需要手动管理这些 Token 和 Cookie。

                            ★、ABP是如何自动完成的？

                                    ABP 的客户端脚本 (abp.js 或 abp.bundle.js) 内部封装了这一切：

                                        1、拦截 AJAX 请求：
                                            
                                                ABP 重写了原生的 XMLHttpRequest 并封装了 fetch API，或者扩展了 jQuery 的 $.ajax（取决于你的项目配置）。这使其能够拦截所有从客户端发起的 AJAX 请求

                                        2、自动添加Token：

                                                在发送任何“非安全”方法（如 POST）的请求之前，ABP 的拦截器会：

                                                        自动从 Cookie 或 DOM 中获取最新的防伪验证 Token。

                                                        自动将其添加到请求头中，通常是 RequestVerificationToken 或 X-XSRF-TOKEN。

                                        3、自动处理认证：

                                                同样，浏览器会自动在每一个请求中带上与当前域匹配的 Cookie (包括 .AspNetCore.Identity.Application).

                                                ABP 不需要为此做额外工作，这是浏览器默认行文。

                                        4、处理UI状态：

                                                LeptonX 主题的 JavaScript 会自动读写 lpx_side-menu-state 这类 Cookie 来记住用户的UI偏好。
            */

            /*
                五、结论

                        1、你不用管：

                                 你绝对不需要再自己的代码中手动获取 Token 或设置请求头。  ABP的脚本已经为你全权处理测CSRF保护的技术细节。
                                 
                                 手动去处理反而会破坏ABP的自动化机制或造成重复。

                        2、在你的Pagfe Model 或  Controller 中的 Action 上，使用了适当的ABP特性 (如 [RomoteService]) 
                        
                                或者 ASP.NET  Core 的特性 (如 [ValidateAntiForgeryToken]),

                                但ABP的默认约定通常已经帮你做好了这些。

                        
                        所以，你的观察和推断是完全准确的。ABP 框架通过其客户端脚本极大地简化了安全性的实现，让开发者可以专注于业务逻辑，

                        而无需纠缠与这些底层的、重复的安全编码任务。
            */
</script>